Core.Aliyunoss = {
    msg : '',//提示信息
    AFiles : [],//待上传文件
    options: null,
    client : null,
    Result : null,
    snum   : 50,//200毫秒/1次,10秒等待
    sTime  : 200,//毫秒 sleep 时间
    init : function(options){
        if (Core.Aliyunoss.client || null) return true;//已经初始化
        if (options || null) {
            Core.Aliyunoss.options = options;
        }
        if (!(Core.Aliyunoss.options.STS || null) && !Core.Aliyunoss.loadSTS()) {
            Core.Aliyunoss.msg = Core.Aliyunoss.msg || 'STS接口错误';return false;
        }
        if (!Core.Aliyunoss.client && !Core.Aliyunoss.initClient()) {
            Core.Aliyunoss.msg = Core.Aliyunoss.msg || 'OSS初始化失败';return false;
        }
        return true;
    },
    Upload : function(options,File){//单个文件上传
        if (!(File || null)) return true;
        if (!this.init(options || null)) {
            Core.Aliyunoss.msg = Core.Aliyunoss.msg || '接口初始化失败';return false;
        }
        this.Result = this.PutFile(File);
        return this.Result;
    },
    multiUpload : function(options,AFiles){
        if (!(AFiles || null) || !Object.keys(AFiles).length) return true;
        if (!this.init(options || null)) {
            Core.Aliyunoss.msg = Core.Aliyunoss.msg || '接口初始化失败';return false;
        }
        if (!(this.Result || null)) {
            this.Result = {};
        }
        for(ckey in AFiles){
            if (this.Result[ckey] || null) continue;
            this.Result[ckey] = this.PutFile(AFiles[ckey]);
        }
        return this.Result;
    },
    PutFile : async function(File){
        let fExt  = File.name.split(".").pop().toLowerCase();
        let fname = (Core.Aliyunoss.options.STS.formhash || (Core.Aliyunoss.options.formhash || ''))+(Math.floor((1+Math.random())*1000))+'.'+fExt;
        let mimetype = File.type || '';
        let options  = {};
        if (mimetype) {
            options.headers  = {"Content-Type": mimetype};
        }
        return await Core.Aliyunoss.client.put((Core.Aliyunoss.options.STS.dir || '')+fname,File,options || null);
    },
    loadSTS : function(){
        if ((Core.Aliyunoss.options.STS || null)) return true;
        if (!(Core.Aliyunoss.options.api || '')) {
            Core.Aliyunoss.msg = 'API地址参数错误';return false;
        }
        $.ajax({url: Core.Aliyunoss.options.api+'?r='+Math.random(),type: "post",async : false,cache: false,dataType: 'json',success: function (res) {
                if ((res.state || '') != 'y') return;
                Core.Aliyunoss.options.STS = res.data;
            }
        });
        return true;
    },
    initClient : function(){
        if (!(Core.Aliyunoss.options.STS || null)) {
            Core.Aliyunoss.msg = 'STS参数错误';return false;
        }
        Core.Aliyunoss.client = new OSS({
            // yourRegion填写Bucket所在地域。以华东1（杭州）为例，Region填写为oss-cn-hangzhou。
            region: Core.Aliyunoss.options.STS.region || '',
            // 从STS服务获取的临时访问密钥（AccessKey ID和AccessKey Secret）。
            accessKeyId: Core.Aliyunoss.options.STS.AccessKeyId || '',
            accessKeySecret: Core.Aliyunoss.options.STS.AccessKeySecret || '',
            // 从STS服务获取的安全令牌（SecurityToken）。
            stsToken: Core.Aliyunoss.options.STS.SecurityToken || '',
            bucket: Core.Aliyunoss.options.STS.bucket || '',// 填写Bucket名称。
            refreshSTSToken: async () => {
                // 向您搭建的STS服务获取临时访问凭证。
                let info = await fetch(Core.Aliyunoss.options.api);
                if ((info.state || '') != 'y') return;
                return {
                    accessKeyId: info.data.AccessKeyId,
                    accessKeySecret: info.data.AccessKeySecret,
                    stsToken: info.data.SecurityToken,
                    region  : info.data.region
                }
            },
            // 刷新临时访问凭证的时间间隔，单位为毫秒。
            refreshSTSTokenInterval: 300000
        });
        return true;
    },
    addFiles : function(){

    },
    getObjectURL : function(file){
        var url = null;
        if (window.createObjectURL != undefined) {
            url = window.createObjectURL(file)
        } else if (window.URL != undefined) {
            url = window.URL.createObjectURL(file)
        } else if (window.webkitURL != undefined) {
            url = window.webkitURL.createObjectURL(file)
        }
        return url
    }
}